package Application;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class Checkout implements Runnable {
private BlockingQueue<Client> queue = new LinkedBlockingQueue<Client>();
private int totalTime;
private int nrOfClients;
private int checkoutNo;
public Checkout(int checkoutNo){
this.checkoutNo=checkoutNo;
}
public void fileWrite(String s){
try(FileWriter fw = new FileWriter("log.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw))
{
out.println(s);
} catch (IOException e) {
e.printStackTrace();
}
}
public void addClient(Client c){
queue.add(c);
fileWrite("Client #"+c.getNoId()+" added to the checkout "+checkoutNo+" arrived at "+c.getArrivalTime()+" carrying "+c.getProcessingTime()+" items.");
System.out.println("Client #"+c.getNoId()+" added to the chekout "+checkoutNo+" arrived at "+c.getArrivalTime()+" carrying "+c.getProcessingTime()+" items.");
}
@Override
public void run(){
while(true){
try{
Client c = queue.take();
fileWrite("Checkout #"+checkoutNo+": is processing client #"+c.getNoId());
System.out.println("Checkout #"+checkoutNo+": is processing client #"+c.getNoId());
Thread.sleep(c.getProcessingTime()*50);
totalTime+=c.getProcessingTime();
nrOfClients++;
fileWrite("Client #"+c.getNoId()+" was processed.");
System.out.println("Client #"+c.getNoId()+" was processed.");
}catch(Exception e){
e.printStackTrace();
}
}
}
public void computeAverageTime(){
float average = totalTime/nrOfClients;
fileWrite("Average waiting time for checkout#"+checkoutNo+" is: "+average);
System.out.println("Average waiting time for checkout#"+checkoutNo+" is: "+average);
}
public int getQueueSize(){
return queue.size();
}
}